home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 6
/
CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso
/
cucd
/
games
/
tkgturbopatch
/
source
/
kalms_c2p.s
< prev
next >
Wrap
Text File
|
1996-10-30
|
7KB
|
470 lines
include "exec/types.i"
xdef c2p_rout
; modulo max res fscreen compu
; c2p1x1_cpu5_queue no 320x256? no 030
IFND BPLX
BPLX EQU 320
ENDC
IFND BPLY
BPLY EQU 256
ENDC
IFND BPLSIZE
BPLSIZE EQU BPLX*BPLY/8
ENDC
IFND CHUNKYXMAX
CHUNKYXMAX EQU BPLX
ENDC
IFND CHUNKYYMAX
CHUNKYYMAX EQU BPLY
ENDC
section c2p,code
; a0 c2pscreen
; a1 bitplanes
; d0.l chunkyx [chunky-pixels]
; d1.w chunkyy [chunky-pixels]
; d2.w (scroffsx) [screen-pixels]
; d3.w scroffsy [screen-pixels]
; d6.l bplxmodulo
; d7.l chxmodulo
c2p_rout
lea c2p_datanew(pc),a2
move.l d0,c2p_chunkyx-c2p_data(a2)
add.l d7,d0
mulu.w d0,d1
move.l d1,c2p_pixels-c2p_data(a2)
move.l d6,c2p_bplxmodulo-c2p_data(a2)
move.l d7,c2p_chxmodulo-c2p_data(a2)
bsr c2p_copyinitblock
lea c2p_data(pc),a2
move.l #$33333333,d5
move.l #$55555555,d6
move.l #$00ff00ff,a6
add.w #BPLSIZE,a1
movem.l a0-a1,-(sp)
move.l a0,c2p_endofline-c2p_data(a2)
move.l d0,-(sp)
move.l c2p_chunkyx-c2p_data(a2),d0
add.l d0,c2p_endofline-c2p_data(a2)
move.l (sp)+,d0
clr.w c2p_dummyflag
move.l c2p_pixels-c2p_data(a2),a2
add.l a0,a2
cmp.l a0,a2
beq .none
move.l (a0)+,d0
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l #$0f0f0f0f,d4 ; Merge 4x1, part 1
and.l d4,d0
and.l d4,d2
lsl.l #4,d0
or.l d2,d0
and.l d4,d1
and.l d4,d3
lsl.l #4,d1
or.l d3,d1
move.l d1,a3
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l (a0)+,d7
and.l d4,d1 ; Merge 4x1, part 2
and.l d4,d2
lsl.l #4,d2
or.l d1,d2
and.l d4,d3
and.l d4,d7
lsl.l #4,d3
or.l d7,d3
move.l a3,d1
swap d2 ; Swap 16x2
move.w d0,d7
move.w d2,d0
move.w d7,d2
swap d2
swap d3
move.w d1,d7
move.w d3,d1
move.w d7,d3
swap d3
bra.s .start1
.x1
move.l (a0)+,d0
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l d7,BPLSIZE(a1)
move.l #$0f0f0f0f,d4 ; Merge 4x1, part 1
and.l d4,d0
and.l d4,d2
lsl.l #4,d0
or.l d2,d0
and.l d4,d1
and.l d4,d3
lsl.l #4,d1
or.l d3,d1
move.l d1,a3
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l (a0)+,d7
move.l a4,(a1)+
and.l d4,d1 ; Merge 4x1, part 2
and.l d4,d2
lsl.l #4,d2
or.l d1,d2
and.l d4,d3
and.l d4,d7
lsl.l #4,d3
or.l d7,d3
move.l a3,d1
swap d2 ; Swap 16x2
move.w d0,d7
move.w d2,d0
move.w d7,d2
swap d2
swap d3
move.w d1,d7
move.w d3,d1
move.w d7,d3
swap d3
move.l a5,-BPLSIZE-4(a1)
tst.w c2p_dummyflag
beq.s .start1
add.l c2p_bplxmodulo,a1
clr.w c2p_dummyflag
.start1
move.l a6,d4
move.l d2,d7 ; Swap 2x2
lsr.l #2,d7
eor.l d0,d7
and.l d5,d7
eor.l d7,d0
lsl.l #2,d7
eor.l d7,d2
move.l d3,d7
lsr.l #2,d7
eor.l d1,d7
and.l d5,d7
eor.l d7,d1
lsl.l #2,d7
eor.l d7,d3
move.l d1,d7
lsr.l #8,d7
eor.l d0,d7
and.l d4,d7
eor.l d7,d0
lsl.l #8,d7
eor.l d7,d1
move.l d1,d7
lsr.l #1,d7
eor.l d0,d7
and.l d6,d7
eor.l d7,d0
move.l d0,BPLSIZE*2(a1)
add.l d7,d7
eor.l d1,d7
move.l d3,d1
lsr.l #8,d1
eor.l d2,d1
and.l d4,d1
eor.l d1,d2
lsl.l #8,d1
eor.l d1,d3
move.l d3,d1
lsr.l #1,d1
eor.l d2,d1
and.l d6,d1
eor.l d1,d2
add.l d1,d1
eor.l d1,d3
move.l d2,a4
move.l d3,a5
cmp.l c2p_endofline,a0
bne .x1
move.l d0,-(sp)
move.l c2p_chxmodulo,d0
add.l d0,a0
add.l c2p_chunkyx,d0
add.l d0,c2p_endofline
st c2p_dummyflag
move.l (sp)+,d0
.skipmodulo
cmpa.l a0,a2
bne .x1
move.l d7,BPLSIZE(a1)
move.l a4,(a1)+
move.l a5,-BPLSIZE-4(a1)
movem.l (sp)+,a0-a1
move.l a0,c2p_endofline
move.l d0,-(sp)
move.l c2p_chunkyx,d0
add.l d0,c2p_endofline
move.l (sp)+,d0
clr.w c2p_dummyflag
add.l #BPLSIZE*4,a1
move.l (a0)+,d0
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l #$f0f0f0f0,d4 ; Merge 4x1, part 1
and.l d4,d0
and.l d4,d2
lsr.l #4,d2
or.l d2,d0
and.l d4,d1
and.l d4,d3
lsr.l #4,d3
or.l d3,d1
move.l d1,a3
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l (a0)+,d7
and.l d4,d1 ; Merge 4x1, part 2
and.l d4,d2
lsr.l #4,d1
or.l d1,d2
and.l d4,d3
and.l d4,d7
lsr.l #4,d7
or.l d7,d3
move.l a3,d1
swap d2 ; Swap 16x2
move.w d0,d7
move.w d2,d0
move.w d7,d2
swap d2
swap d3
move.w d1,d7
move.w d3,d1
move.w d7,d3
swap d3
bra.s .start2
.x2
move.l (a0)+,d0
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l d7,BPLSIZE(a1)
move.l #$f0f0f0f0,d4 ; Merge 4x1, part 1
and.l d4,d0
and.l d4,d2
lsr.l #4,d2
or.l d2,d0
and.l d4,d1
and.l d4,d3
lsr.l #4,d3
or.l d3,d1
move.l d1,a3
move.l (a0)+,d2
move.l (a0)+,d1
move.l (a0)+,d3
move.l (a0)+,d7
move.l a4,(a1)+
and.l d4,d1 ; Merge 4x1, part 2
and.l d4,d2
lsr.l #4,d1
or.l d1,d2
and.l d4,d3
and.l d4,d7
lsr.l #4,d7
or.l d7,d3
move.l a3,d1
swap d2 ; Swap 16x2
move.w d0,d7
move.w d2,d0
move.w d7,d2
swap d2
swap d3
move.w d1,d7
move.w d3,d1
move.w d7,d3
swap d3
move.l a5,-BPLSIZE-4(a1)
tst.w c2p_dummyflag
beq.s .start2
add.l c2p_bplxmodulo,a1
clr.w c2p_dummyflag
.start2
move.l a6,d4
move.l d2,d7 ; Swap 2x2
lsr.l #2,d7
eor.l d0,d7
and.l d5,d7
eor.l d7,d0
lsl.l #2,d7
eor.l d7,d2
move.l d3,d7
lsr.l #2,d7
eor.l d1,d7
and.l d5,d7
eor.l d7,d1
lsl.l #2,d7
eor.l d7,d3
move.l d1,d7
lsr.l #8,d7
eor.l d0,d7
and.l d4,d7
eor.l d7,d0
lsl.l #8,d7
eor.l d7,d1
move.l d1,d7
lsr.l #1,d7
eor.l d0,d7
and.l d6,d7
eor.l d7,d0
move.l d0,BPLSIZE*2(a1)
add.l d7,d7
eor.l d1,d7
move.l d3,d1
lsr.l #8,d1
eor.l d2,d1
and.l d4,d1
eor.l d1,d2
lsl.l #8,d1
eor.l d1,d3
move.l d3,d1
lsr.l #1,d1
eor.l d2,d1
and.l d6,d1
eor.l d1,d2
add.l d1,d1
eor.l d1,d3
move.l d2,a4
move.l d3,a5
cmpa.l c2p_endofline,a0
bne .x2
move.l d0,-(sp)
move.l c2p_chxmodulo,d0
add.l d0,a0
add.l c2p_chunkyx,d0
add.l d0,c2p_endofline
st c2p_dummyflag
move.l (sp)+,d0
.skip2
cmpa.l a0,a2
bne .x2
move.l d7,BPLSIZE(a1)
move.l a4,(a1)+
move.l a5,-BPLSIZE-4(a1)
.none
rts
c2p_copyinitblock
movem.l a0-a1,-(sp)
lea c2p_datanew,a0
lea c2p_data,a1
moveq #16-1,d0
.copy move.l (a0)+,(a1)+
dbf d0,.copy
movem.l (sp)+,a0-a1
rts
cnop 0,4
c2p_data
c2p_screen dc.l 0
c2p_bplsize dc.l 0
c2p_pixels dc.l 0
c2p_endofline dc.l 0
c2p_chunkyx dc.l 0
c2p_bplxmodulo dc.l 0
c2p_chxmodulo dc.l 0
c2p_chunkyy dc.w 0
c2p_rowmod dc.w 0
c2p_dummyflag dc.w 0
ds.l 16
cnop 0,4
c2p_datanew
ds.l 16